package com.one.group.service;

import com.mybatisflex.core.service.IService;
import com.one.group.model.dto.OwnerAddDto;
import com.one.group.model.dto.OwnerQueryDto;
import com.one.group.model.dto.OwnerSearchVo;
import com.one.group.model.entity.Owner;
import com.one.group.model.vo.OwnerListVo;
import com.one.group.model.vo.OwnerDetailVo;

import java.io.InputStream;
import java.util.List;

public interface OwnerService extends IService<Owner> {
    /**
     * 添加业主
     * @param ownerAddDto 业主信息
     * @return 添加结果
     */
    boolean addOwner(OwnerAddDto ownerAddDto);

    /**
     * 查询业主列表
     * @param ownerQueryDto 查询条件
     * @return 业主列表
     */
    List<OwnerListVo> getOwnerList(OwnerQueryDto ownerQueryDto);

    /**
     * 迁出业主
     * @param houseId 房屋ID
     * @return 操作结果
     */
    boolean moveOutOwner(Long houseId);

    /**
     * 批量迁出业主
     * @param houseIds 房屋ID列表
     * @return 操作结果
     */
    boolean moveOutOwnerBatch(List<Long> houseIds);

    /**
     * 业主迁入
     * @param ownerId 业主ID
     * @param houseId 房屋ID
     * @param moveInTime 迁入时间
     * @return 操作结果
     */
    boolean moveInOwner(Long ownerId, Long houseId, java.util.Date moveInTime);

    /**
     * 批量审核业主
     * @param ownerIds 业主ID列表
     * @param status 状态
     * @return 操作结果
     */
    boolean auditOwnerBatch(List<Long> ownerIds, Integer status);

    /**
     * 根据业主ID获取业主详情
     * @param ownerId 业主ID
     * @return 业主详情
     */
    OwnerDetailVo getOwnerDetailById(Long ownerId);

    /**
     * 批量导入业主信息
     * @param file Excel文件
     * @return 导入结果
     */
    String importOwners(InputStream file);

    /**
     * 删除业主
     * @param ownerId 业主ID
     * @return 操作结果
     */
    boolean deleteOwner(Long ownerId);

    /**
     * 批量删除业主
     * @param ownerIds 业主ID列表
     * @return 操作结果
     */
    boolean deleteOwnerBatch(List<Long> ownerIds);

    /**
     * 根据业主名字模糊查询获取业主ID列表
     * @param ownerName 业主名字（支持模糊查询）
     * @return 业主ID列表
     */
    List<OwnerSearchVo> getOwnerIdsByName(String ownerName);

}
